<?php
    class Empresa extends BaseModel
    {
        protected $empresaid;
        protected $cnpj;
        protected $nome;
        protected $fantasia;
        protected $rua;
        protected $numero;
        protected $complemento;
        protected $cep;
        protected $bairro;
        protected $telefone1;
        protected $telefone2;
        protected $fax;
        protected $ie;
        protected $im;
        

        const tablename = "empresas";
        const tablekey = "empresaid";
        const tablesequence = "empresas_empresaid_seq";
        
        public function salvar(){
        	
        	$this->cep = TUtils::CepToNum( $this->cep );
        	$this->telefone1 = TUtils::FoneToNum( $this->telefone1 );
        	$this->fax = TUtils::FoneToNum( $this->fax );
        	$this->cnpj = TUtils::CnpjToNum( $this->cnpj );
        	$this->telefone2 = TUtils::FoneToNum( $this->telefone2 );
        	
        	# Validação de CNPJ
        	if ( TUtils::CnpjValidacao( $this->cnpj ) === false )
        		throw new Exception("CNPJ inválido.");

        	# Unicidade CNPJ
        	if ( $this->verificarCnpj() === false )
        		throw new Exception("Este CNPJ já está cadastrado.");
        	
        	parent::salvar();
        	
        }
        
        public function verificarCnpj(){
        	
        	$sql = "SELECT count(*) AS total FROM " . $this->getTableName() . " WHERE cnpj = '" . $this->cnpj . "'";
        	if ( $this->getTableKeyValue() )
        		$sql .= " AND " . $this->getTableKey() . " <> " . $this->getTableKeyValue();
        	$result = pg_fetch_object(TSqlSelect::customSelect($sql));
        	
        	if ( $result->total > 0 )
        		return false;
        		
        	return true;
        	
        }
        
        public function totalContratosAtivos(){
            $contrato = new Contrato();
            $criterio = array('precondicao'=>'ativo is TRUE AND empresaid ='. $this->empresaid);
            $result = $contrato->listar($criterio);
            return pg_num_rows($result);            
        }
        
        public function verificarDependencias( $ids )
        {
            $idsSql = '';
            if (is_array ($ids)){
                foreach ($ids as $id){
                    $idsSql .= ', ' . $id;
                }
                $idsSql = substr( $idsSql, 1 );
            }
            elseif (is_numeric ( $ids)){
                $idsSql = $ids;
            }
            else {
                throw new Exception( 'ID inválido.' );
            }
            
            $operador = new Operador();
            $result = $operador->listar( array('precondicao' => $this->getTableKey() . ' IN (' . $idsSql . ')' ) );
            
            $contrato = new Contrato();
            $result2 = $contrato->listar( array('precondicao' => $this->getTableKey() . ' IN (' . $idsSql . ')' ) );
            
            if (pg_num_rows ($result) > 0 OR pg_num_rows ($result2) > 0){
                if (is_array ($ids)){
                    throw new Exception( TMensagens::getChavesEstrangeiras() );
                }
                else {
                    throw new Exception( TMensagens::getChaveEstrangeira() );
                }
            }
        }
        
        public function excluir()
        {
            if ( $this->getTableKeyValue() ){
                $this->verificarDependencias ($this->getTableKeyValue());
                parent::excluir();
            }            
        }
        
        public function excluirGrupo ($ids)
        {
            $this->verificarDependencias($ids);
            parent::excluirGrupo ($ids);
        }
    }
?>